前面的教學建立AWS的方式其實都是使用手動建立的方式,但過程中非常耗時,也容易出錯。
CDK(Cloud Development Kit)是一套可以用寫程式的方式來建立AWS資源,增加建置的效率,並且也可以使用git作版本控管,非常方便。
這邊單純講的話會非常空洞,因此直接學習他人的實作題來進行,增加學習的熟悉度。
在這篇的教學文章中,使用CDK建立一個SQS,然後會觸發Lamdbda,接著將lambda訊息寫到cloudwatch。
所以整理一下,一共有幾件事要做
要讓event觸發lambda一樣需要library,我們使用npm安裝
npm i @aws-cdk/aws-lambda-event-sources
在import的部分一樣加入event sources library
// 引入需要的 library
import event_sources = require('@aws-cdk/aws-lambda-event-sources');
並且修正function內容,讓lambda加入event source
const queue = new sqs.Queue(this, "HelloQueue");
const fn = new lambda.Function(this, 'HelloFunction', {
runtime: lambda.Runtime.NODEJS_12_X,
code: lambda.Code.asset('lambda'),
handler: 'index.handler'
});
// 幫這個 lambda function 加上 sqs 這個 event sources
fn.addEventSource(new event_sources.SqsEventSource(queue));
所以最後lib/hello-cdk-stack.ts會長成
import * as cdk from '@aws-cdk/core';
// 引入 aws-sqs
import sqs = require('@aws-cdk/aws-sqs');
// 引入需要的 library
import lambda = require('@aws-cdk/aws-lambda');
// 引入需要的 library
import event_sources = require('@aws-cdk/aws-lambda-event-sources');
export class HelloCdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const queue = new sqs.Queue(this, "HelloQueue");
const fn = new lambda.Function(this, 'HelloFunction', {
runtime: lambda.Runtime.NODEJS_12_X,
code: lambda.Code.asset('lambda'),
handler: 'index.handler'
});
// 幫這個 lambda function 加上 sqs 這個 event sources
fn.addEventSource(new event_sources.SqsEventSource(queue));
}
}
一樣使用指令部署
cdk deploy
進入lambda後,可以發現有Queue可以觸發lambda
進入SQS發一個測試的訊息,就可以在CloudWatch中看到log了
https://medium.com/@azole/aws-cdk-%E5%88%9D%E6%8E%A2-5b481d3970bd